<p><code> Date </code>字段的有效值范围以0还是1开头，随字段而异。例如，月份从0开始，月份的一天从1开始。输入一个超出有效范围末尾的日期值，日期将滚动显示而没有错误或异常。例如，输入12作为月份，您将获得第二年的一月。</p>

<p>此规则检查与<code> java.util.Date </code>，<code> java.sql.Date </code>和<code> java.util.Calendar </code>结合使用的错误值。具体来说，超出有效范围的值：</p>
<table>
  <thead>
  <tr><td>Field</td> <td>Valid</td></tr>
  </thead>
  <tbody>
    <tr><td>month</td><td>0-11</td></tr>
    <tr><td>date (day)</td><td>0-31</td></tr>
    <tr><td>hour</td><td>0-23</td></tr>
    <tr><td>minute</td><td>0-60</td></tr>
    <tr><td>second</td><td>0-61</td></tr>
  </tbody>
</table>

<p>请注意，此规则不会检查无效的leap年，leap秒（秒= 61）或每月31号的无效使用。</p>
<h2>不规范的代码示例</h2>
<pre>
Date d = new Date();
d.setDate(25);
d.setYear(2014);
d.setMonth(12);  // 不合规；滚动到明年

Calendar c = new GregorianCalendar(2014, 12, 25);  // 不合规
if (c.get(Calendar.MONTH) == 12) {  // 不合规；无效的比较
  // ...
}
</pre>

<h2>正确的代码示例</h2>
<pre>
Date d = new Date();
d.setDate(25);
d.setYear(2014);
d.setMonth(11);

Calendar c = new Gregorian Calendar(2014, 11, 25);
if (c.get(Calendar.MONTH) == 11) {
  // ...
}
</pre>
